package main

import (
	"fmt"
)

func fintarray(a []int) {
	a[0] = 10 //可以修改数组切片里的值
}
func fintarray1(a []int) {
	a = nil //a实际是数组切片slices的地址拷贝所以并不能修改函数外的切片slices
}
func fintarray2(a []int) {
	a = append(a, 4) //a实际是数组切片slices的地址拷贝所以并不能修改函数外的切片slices
}
func fintarray3(a [3]int) {
	a[0] = 3 //a是数组的拷贝，不能修改函数外的数组
}
func fintarray4(a *[]int) {
	*a = append(*a, 4) //这里的a是传递的函数外的切片地址所以能对函数外的切片做出修改
}
func main() {
	var a = []int{1, 2}
	var b = [...]int{1, 2, 3}
	fintarray(a)
	fmt.Println(a) //[10 2]

	fintarray(b[:])
	fmt.Println(b) //[10 2 3]
	fintarray1(b[:])
	fmt.Println(b) //[10 2 3]
	fintarray2(b[:])
	fmt.Println(b) //[10 2 3]
	fintarray3(b)
	fmt.Println(b) //[10 2 3]

	fintarray4(&a)
	fmt.Println(a) //[10 2 4]
}
